package Objects;

import java.awt.*;
import javax.swing.ImageIcon;
import Invaders.Invader;

// Esta classe representa um tiro no jogo.
public class Bullet {
	
	// Posição do tiro em pixels.  
	private int x,y;
	// Direção do tiro.
	private Estado Estado;
	// Este tiro esta ativo?
	private boolean estaAtivo;
	// Tamanho do tiro em pixels.
	private int iw,ih;
	// Imagem do tiro.
	private Image icon;
	// Area do painel do jogo (para controlar movimento).  
	private Dimension area;

	// Construtor, inicializa atributos, cria a bala.
	public Bullet(Dimension a,int x,int y,Estado dir) {
	    area = a;
	    icon = new ImageIcon(getClass().getResource("/Sprites/shoot.gif")).getImage();
	    iw = icon.getWidth(null);
	    ih = icon.getHeight(null);
	    // x e y passados direto como argumentos
	    this.x = x;
	    this.y = y;
	    Estado = dir;
	    estaAtivo = true;
    }
  
	// Método que movimenta a bala (em quatro possíveis direções).
	public void move() {
	    if (!estaAtivo) {
	    	
	    }
	    switch(Estado) {
		  	case LEFT:
			    x -= 5; 
			    if (x < 0) {
			    	estaAtivo = false; 
			    }
			    break;
		  	case RIGHT: 
			    x += 5; 
			    if (x > area.width) {
			    	estaAtivo = false;
			    }
			    break;
		  	case UP: 
			    y -= 5; 
			    if (y < 0) {
			    	estaAtivo = false; 
			    }
			    break;
		  case DOWN: 
			  y += 5; 
			  if (y > area.height-100) {
				  estaAtivo = false; 
			  }
			  break;
	    }
    }
  
  // Método que desenha a bala em um contexto gráfico. 
	public void draw(Graphics g) {
		if (estaAtivo) {
			g.drawImage(icon,x,y,null);
		}
    }
  
  // Precisamos saber se esta bala está ativa!
	public boolean estaAtivo() { 
		return estaAtivo; 
	}

  // Verificamos se a bala está perto de um Invader
	public boolean acertouEm(Invader i) {
	  
		int ox = i.getXm(); 
		int oy = i.getYm();
		int ox1 = i.getXm1();
		int oy1 = i.getYm1();
		int ox2 = i.getXm2();
		int oy2 = i.getYm2();
		int ox3 = i.getXm3();
		int oy3 = i.getYm3();
		int xm = getXm(); 
		int ym = getYm();
	    if (Math.sqrt((xm-ox)*(xm-ox)+(ym-oy)*(ym-oy)) <= i.getRaioColisao()) {
	    	i.perdeLife();
	    	estaAtivo = false;
	    	return true;
	    }
	    if (Math.sqrt((xm-ox1)*(xm-ox1)+(ym-oy1)*(ym-oy1)) <= i.getRaioColisao2()) {
	    	i.perdeLife();
	    	estaAtivo = false;
	    	return true;
	    }
	    if (Math.sqrt((xm-ox2)*(xm-ox2)+(ym-oy2)*(ym-oy2)) <= i.getRaioColisao1()) {
	    	i.perdeLife();
	    	estaAtivo = false;
	    	return true;
	    }
	    if (Math.sqrt((xm-ox3)*(xm-ox3)+(ym-oy3)*(ym-oy3)) <= i.getRaioColisao1()) {
	    	i.perdeLife();
	    	estaAtivo = false;
	    	return true;
	    }
	    return false;
	}
  
	// X medio da imagem para colisao
	public int getXm() {
	  	return x + (iw/2);
	}
  
	// Y medio da imagem para colisao
	public int getYm() {
		return y + (ih/2);
	}
}